target-version = "py39"
line-length = 120

[lint]
exclude = [
    "tests/fixtures/*.py",
]
select = [
    "A", "ANN", "ARG",
    "B", "BLE",
    "C", "C4",
    "COM",
    "D", "DTZ",
    "E", "ERA", "EXE",
    "F", "FBT",
    "G",
    "I", "ICN", "INP", "ISC",
    "N",
    "PGH", "PIE", "PL", "PLC", "PLE", "PLR", "PLW", "PT", "PYI",
    "Q",
    "RUF", "RSE", "RET",
    "S", "SIM", "SLF",
    "T", "T10", "T20", "TCH", "TID", "TRY",
    "UP",
    "W",
    "YTT",
]
ignore = [
    "A001",  # Variable is shadowing a Python builtin
    "ANN101",  # Missing type annotation for self
    "ANN102",  # Missing type annotation for cls
    "ANN204",  # Missing return type annotation for special method __str__
    "ANN401",  # Dynamically typed expressions (typing.Any) are disallowed
    "ARG005",  # Unused lambda argument
    "C901",  # Too complex
    "D105",  # Missing docstring in magic method
    "D417",  # Missing argument description in the docstring
    "E501",  # Line too long
    "ERA001",  # Commented out code
    "G004",  # Logging statement uses f-string
    "PLR0911",  # Too many return statements
    "PLR0912",  # Too many branches
    "PLR0913",  # Too many arguments to function call
    "PLR0915",  # Too many statements
    "SLF001", # Private member accessed
    "TRY003",  # Avoid specifying long messages outside the exception class
]

[lint.per-file-ignores]
"src/*/cli.py" = [
    "T201",  # Print statement
]
"src/*/debug.py" = [
    "T201",  # Print statement
]
"scripts/*.py" = [
    "INP001",  # File is part of an implicit namespace package
    "T201",  # Print statement
]
"tests/*.py" = [
    "ARG005",  # Unused lambda argument
    "FBT001",  # Boolean positional arg in function definition
    "PLR2004",  # Magic value used in comparison
    "S101",  # Use of assert detected
]

[lint.flake8-quotes]
docstring-quotes = "double"

[lint.flake8-tidy-imports]
ban-relative-imports = "all"

[lint.isort]
known-first-party = ["{{ python_package_import_name }}"]

[lint.pydocstyle]
convention = "google"

[format]
exclude = [
    "tests/fixtures/*.py",
]
docstring-code-format = true
docstring-code-line-length = 80
